//package cc.magicjson.example.demo.virtual;
//
//
//
//import org.junit.jupiter.api.Test;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.*;
//import java.util.function.Function;
//
//import static org.junit.jupiter.api.Assertions.assertEquals;
//
//
///**
// * 虚拟线程管理器并发任务测试
// * @author <a href="mailto:it_magicjson@163.com">MagicJson</a>
// */
//public class VirtualThreadManagerConcurrencyTest {
//
//    private final VirtualThreadManager manager = VirtualThreadManager.INSTANCE;
//    private static final ThreadLocal<Object> threadLocal = new ThreadLocal<>();
//    private static final int THREAD_COUNT = 100;
//
//    @Test
//    public void testVirtualThreadWithThreadLocalConcurrency() throws InterruptedException, ExecutionException {
//        // 创建一个固定大小的线程池，模拟并发环境
//        ExecutorService testExecutor = Executors.newFixedThreadPool(THREAD_COUNT);
//        manager.setExecutor(testExecutor);
//
//        // 使用 CountDownLatch 来保证所有线程同时开始执行
//        CountDownLatch latch = new CountDownLatch(THREAD_COUNT);
//        List<Future<String>> results = new ArrayList<>();
//
//        // 多线程并发提交任务
//        for (int i = 0; i < THREAD_COUNT; i++) {
//            final int threadId = i;
//            threadLocal.set("Thread-" + threadId);
//
//            // 定义任务
//            Function<ThreadLocal<Object>, String> task = (local) -> {
//                try {
//                    latch.await();  // 等待所有线程准备好
//                    return "ThreadLocal value: " + local.get();
//                } catch (InterruptedException e) {
//                    Thread.currentThread().interrupt();
//                    return null;
//                }
//            };
//
//            // 提交任务到虚拟线程并添加到结果集合
//            Future<String> future = manager.execute(task, threadLocal);
//            results.add(future);
//
//            // 减少 CountDownLatch 计数器
//            latch.countDown();
//        }
//
//        // 验证每个任务的结果是否正确
//        for (int i = 0; i < THREAD_COUNT; i++) {
//            Future<String> result = results.get(i);
//            assertEquals("ThreadLocal value: Thread-" + i, result.get());
//        }
//
//        // 关闭自定义线程池
//        testExecutor.shutdown();
//    }
//}
